/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.deployment.dao;

import br.com.deployment.daogenerico.DaoGenerico;
import br.com.deployment.entidade.fermojupi.AtoItem;
import br.com.deployment.entidade.fermojupi.Emolumento;
import br.com.deployment.entidade.fermojupi.EmolumentoItem;
import br.com.deployment.interfaces.EmolumentoDaoIn;
import br.com.deployment.utilitario.Msg;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.Query;

/**
 *
 * @author luciano
 */
@Stateless
@LocalBean
public class EmolumentoDao extends DaoGenerico<Emolumento> implements EmolumentoDaoIn{

    public EmolumentoDao() {
        super(Emolumento.class);
    }
    
    @Override
    public void save(Emolumento dis) {
        
            dis.setDataCad(new Date());
            dis.setAtivo(true);
            getEm().persist(dis);
            Msg.messagemInfo("Emolumento salvo com Sucesso");
        
    }
     
    @Override
     public List<Emolumento> findEmolumento(Emolumento emol) {
        List<Emolumento> lstEmol = new ArrayList<Emolumento>();
        String sql = "Select e from Emolumento e where"
                + " e.descricao like :descr";

        Query query = getEm().createQuery(sql);

        if (emol != null) {
            query.setParameter("descr", "%" + emol.getDescricao() + "%");
        }
        
        lstEmol = query.getResultList();
        return lstEmol;
    }
     
    @Override
      public Emolumento findEmolAtivo() {
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
        
        String sql;
        Query query = null;
        
        sql = "Select e from Emolumento e where e.ativo = true ";
        query = getEm().createQuery(sql);
        
        return (Emolumento) query.getSingleResult();
    }
      
    @Override
     public boolean verificaEmolumentoItemAto(AtoItem ai){
         String sql = "Select e.valor from EmolumentoItem e JOIN e.atoItem ai"
                + " where ai.id = :id";
          Query query = getEm().createQuery(sql);
          query.setParameter("id", ai.getId());
          
          List lst = query.getResultList();
        
          return !lst.isEmpty();
    }
    
    @Override
     public List<Emolumento> findPesquisar(Emolumento emol) {
        List<Emolumento> list = new ArrayList<Emolumento>();
        if (emol != null) {
            String sql = "Select a from Emolumento a where ";

            if (emol.getDescricao() != null && emol.getDescricao() != "") {
                sql += " lower(a.descricao) like lower(?1) and";
            }
            if (emol.getDatVigor() != null) {
                sql += " a.datVigor = ?2 and";
            }
            sql += " 1=1 ";
            Query query = getEm().createQuery(sql);
            if (emol.getDescricao() != null && emol.getDescricao() != "") {
                query.setParameter("1", "%" + emol.getDescricao() + "%");
            }
            if (emol.getDatVigor() != null) {
                query.setParameter("2", emol.getDatVigor());
            }
            list = query.getResultList();
            System.out.println(sql);
        }

        return list;
    }


    
    @Override
    public BigDecimal valorToAto(AtoItem atoItem, BigDecimal valor){
        String sql = "Select e.valor from EmolumentoItem e JOIN e.atoItem ai"
                + " where";
        if(valor != BigDecimal.ZERO ){
            sql += "  e.valInicial <= :valor and e.valFinal >= :valor and ai.id = :id or "
                    + " e.valInicial = 0 and e.valFinal = 0 and ai.id = :id";
        }else{
            sql += " e.valInicial = 0 and e.valFinal = 0 and ai.id = :id";
        }
        
        Query query = getEm().createQuery(sql);
        if(valor != BigDecimal.ZERO){
            query.setParameter("valor", valor);
        }
        query.setParameter("id", atoItem.getId());
        
        BigDecimal resul = new BigDecimal(query.getSingleResult().toString());
        
        return resul;
        
    }
    
    @Override
    public EmolumentoItem valorToAtoProtocolo(AtoItem atoItem, BigDecimal valor){
        String sql = "Select e from EmolumentoItem e JOIN e.atoItem ai"
                + " where";
        if(valor != BigDecimal.ZERO ){
            sql += "  e.valInicial <= :valor and e.valFinal >= :valor and ai.id = :id or "
                    + " e.valInicial = 0 and e.valFinal = 0 and ai.id = :id";
        }else{
            sql += " e.valInicial = 0 and e.valFinal = 0 and ai.id = :id";
        }
        
        Query query = getEm().createQuery(sql);
        if(valor != BigDecimal.ZERO){
            query.setParameter("valor", valor);
        }
        query.setParameter("id", atoItem.getId());
        
        EmolumentoItem ei = (EmolumentoItem) query.getSingleResult();
        
        return ei;
        
    }
}
